/**
 * Generali Solutions d'assurances - Tous droits rï¿½servï¿½s &copy; 2007 - 2010
 */
package fr.generali.accueilclient.ggs.consultationreglements.services.impl;

import javax.xml.ws.WebServiceException;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.ggs.consultationreglement.om.IConsultationDerniersReglements;
import fr.generali.accueilclient.ggs.consultationreglement.om.ICriteresDerniersReglements;
import fr.generali.accueilclient.ggs.consultationreglements.services.IConsultationDerniersReglementsService;
import fr.generali.accueilclient.utils.code.error.ConsultationReglementCodeError;
import fr.generali.sinistres.prestationssante.ggs.consultationderniersreglements.dtoretour.DtoRetourConsultationDerniersReglements;
import fr.generali.sinistres.prestationssante.ggs.consultationderniersreglements.services.IConsultationDerniersReglementsWebService;

/**
 * @author Holmes Kelly
 */
@Service("consultationDerniersReglementsService")
public class ConsultationDerniersReglementsService implements IConsultationDerniersReglementsService {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(ConsultationDerniersReglementsService.class);

    /**
     * Appel web service consultation derniers reglements
     */
    @Autowired
    @Qualifier("consultationDerniersReglementsWebService")
    private IConsultationDerniersReglementsWebService consultationDerniersReglementsWebService;

    /**
     * Appel au maper consultation dernier reglements
     */
    @Autowired
    @Qualifier("consultationDerniersReglementsMapper")
    private ConsultationDerniersReglementsMapper consultationDerniersReglementsMapper;

    /**
     * {@inheritDoc}
     */
    @Override
    public IConsultationDerniersReglements consulterDerniersReglementsSinistres(
                    ICriteresDerniersReglements criteresDerniersReglements) throws AccueilClientBusinessException {

        IConsultationDerniersReglements consultationDerniersReglements = null;

        if (criteresDerniersReglements != null && criteresDerniersReglements.getDtoContrat() != null
                        && StringUtils.isNotBlank(criteresDerniersReglements.getDtoContrat().getIdentifiant())) {

            consultationDerniersReglementsMapper.fillCriteresDerniersReglements(criteresDerniersReglements);

            String codeRetour = null;

            DtoRetourConsultationDerniersReglements retourConsulterDerniersReglements = null;

            try {

                retourConsulterDerniersReglements =
                                consultationDerniersReglementsWebService
                                                .consulterDerniersReglements(consultationDerniersReglementsMapper
                                                                .mapperConsultationReglementsToCriteresReglements(criteresDerniersReglements));

                codeRetour =
                                retourConsulterDerniersReglements.getDtoErreur() == null ? null
                                                : retourConsulterDerniersReglements.getDtoErreur().getCode();

            } catch (WebServiceException e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientTechnicalException(e.getMessage());
            }

            if (StringUtils.isNotBlank(codeRetour)
                            && !StringUtils.equals(codeRetour, ConsultationReglementCodeError.CODE_ERROR_OK.getCode())) {

                LOGGER.debug(ConsultationReglementCodeError.getMessageErrorServiceParCode(codeRetour));
                throw new AccueilClientBusinessException(
                                ConsultationReglementCodeError.getMessageErrorServiceParCode(codeRetour), codeRetour);
            }

            if (retourConsulterDerniersReglements != null) {

                consultationDerniersReglements =
                                consultationDerniersReglementsMapper
                                                .mapperRetourConsultationDerniersReglement(retourConsulterDerniersReglements);
                consultationDerniersReglementsMapper.fillTypeDestinataireInListeReglementSinistres(
                                criteresDerniersReglements, consultationDerniersReglements);

            }

        }

        return consultationDerniersReglements;
    }
}
